Linux 是怎样工作的

#linux

计算机系统的概要

在计算机运行时,在硬件设备上会重复执行以下步骤。

Pasted image 20230518230004.png300

  1. 通过输入设备或网络适配器,向计算机发起请求。
  2. 读取内存中的命令,并在 CPU 上执行,把结果写入负责保存数据的内存区域中。
  3. 将内存中的数据写入 HDD(Hard Disk Drive,硬盘驱动器)、SDD(Solid State Disk,固态硬盘)等存储器,或者通过网络发送给其他计算机,或者通过输出设备提供给用户。
  4. 回到步骤 1。

由这些重复执行的步骤整合而成的对用户有意义的处理,就称为程序。程序大体分为以下几种。

Pasted image 20230518230105.png300

通常情况下,程序在 OS 上以进程为单位运行。每个程序由一个或多个进程构成。包括 Linux 在内的大部分 OS 能同时运行多个进程。

Pasted image 20230518230345.png400

调用外部设备是 Linux 的一个重要功能。如果没有 Linux 这样的 OS,就不得不为每个进程单独编写调用设备的代码。

Pasted image 20230518231441.png400

当不存在 OS 时的设备调用在这种情况下,会存在以下缺点。

为了解决上述问题,Linux 把设备调用处理整合成了一个叫做设备驱动程序的程序,使进程通过设备驱动程序访问设备。

Pasted image 20230518231720.png400

虽然世界上存在各种设备,当对于同一类型的设备,Linux 可以通过同一个接口进行调用。

Pasted image 20230518231818.png400

通过同一个接口调用同一类型的设备。在某个进程因为 Bug 或程序员的恶意操作而违背了“通过设备驱动程序访问设备”这一规则的情况下,依然会出现多个进程同时调用设备的情况。为了避免这种情况,Linux 借助硬件,使进程无法直接访问设备。具体来说,CPU 存在内核模式和用户模式两种模式,只有处于内核模式时才允许访问设备。另外,使设备驱动程序在内核模式下运行,使进程在用户模式下运行。

Pasted image 20230518232133.png400

进程在用户模式下运行,设备驱动程序在内核模式下运行。除此之外,还有许多不应被普通进程调用的处理程序,如下所示。

这些程序也全都在内核模式下运行。把这些在内核模式下运行的 OS 的核心处理整合在一起的程序就叫做内核。如果进程想要使用设备驱动程序等由内核提供的功能,就需要通过被称为系统调用的特殊处理来向内核发出请求。

需要指出的是,OS 并不单指内核,它是由内核和许多在用户模式下运行的程序构成的。关于 Linux 中的在用户模式下运行的功能,以及作为进程与内核的通信接口的系统调用,我们将在下一节具体说明。第三节将对负责创建与终止进程的进程管理系统进行说明。内核负责管理计算机系统上的 CPU 和内存等各种资源,然后把这些资源按需分配给在系统上运行的各个进程。

Pasted image 20230518232653.png400

内核管理着 CPU 和内存等资源。负责管理 CPU 资源的进程调度器的相关内容将在第4节详细说明,负责管理内存的内存管理系统的相关内容将在第 5 节详细说明。

在进程运行的过程中,各种数据会以内存为中心,在 CPU 上的寄存器或外部寄存器等各种存储器之间进行交互。这些存储器在容量、价格和访问速度等方面都有各自的优缺点,从而构成被称为存储层次的存储系统层次结构。从提供程序运行速度和稳定性方面来说,灵活有效地运行各种存储器是必不可少的一环。存储层次的相关内容将在第 6 节说明。